package com.br.semperparata.pag_fbb_rj.entity;

import java.util.ArrayList;
import java.util.List;

public class Objetivo implements Comparable<Objetivo> {
	private String descricao;
	private List<Ramo> ramos;
	
	public Objetivo() {
		this("");
	}
	
	public Objetivo(String descricao, Ramo ramo1, Ramo ramo2, Ramo ramo3) {
		this.descricao = descricao;
		
		List<Ramo> ramos = null;
		if (ramo1 != null || ramo2 != null || ramo3 != null) {
			ramos = new ArrayList<Ramo>();
			if (ramo1 != null)
				ramos.add(ramo1);
			if (ramo2 != null)
				ramos.add(ramo2);
			if (ramo3 != null)
				ramos.add(ramo3);
		}
		this.ramos = ramos;
	}
	
	public Objetivo(String descricao, Ramo ramo1, Ramo ramo2) {
		this(descricao, ramo1, ramo2, null);
	}
	
	public Objetivo(String descricao, Ramo ramo1) {
		this(descricao, ramo1, null, null);
	}
	
	public Objetivo(String descricao) {
		this(descricao, null, null, null);
	}
	
	public String getDescricao() {
		return descricao;
	}

	public List<Ramo> getRamos() {
		return ramos;
	}
	
	public boolean hasRamo(Ramo ramo) {
		if (ramos != null && ramo != null) {
			for (Ramo r : ramos) {
				if (r == ramo)
					return true;
			}
			return false;
		} else if (ramos == null || ramos.size() == 0) {
			return true;
		}
		else
			return false;
	}

	public static List<Objetivo> getListaObjetivos() {
		List<Objetivo> objetivos = new ArrayList<Objetivo>();
		Objetivo o;
		
		o = new Objetivo("Objetivo Geral");
		objetivos.add(o);
		o = new Objetivo("Objetivo C B1 B2", Ramo.CIRANDA, Ramo.B1, Ramo.B2);
		objetivos.add(o);
		o = new Objetivo("Objetivo B1 B2 G", Ramo.B1, Ramo.B2, Ramo.GUIA);
		objetivos.add(o);
		o = new Objetivo("Objetivo B2 G", Ramo.B2, Ramo.GUIA);
		objetivos.add(o);
		o = new Objetivo("Objetivo C G", Ramo.CIRANDA, Ramo.GUIA);
		objetivos.add(o);
		o = new Objetivo("Objetivo B1", Ramo.B1);		
		objetivos.add(o);
		
		return objetivos;
	}
	
	public static List<Objetivo> getListaObjetivos(Ramo ramo) {
		List<Objetivo> objetivos = getListaObjetivos();
		List<Objetivo> list = new ArrayList<Objetivo>();
		
		for (Objetivo objetivo : objetivos) {
			if (objetivo.hasRamo(ramo))
				list.add(objetivo);
		}
		return list;
	}
	
	@Override
	public String toString() {
		return descricao;
	}

	@Override
	public int compareTo(Objetivo o) {
		return this.getDescricao().compareToIgnoreCase(o.getDescricao());
	}
}
